package com.qiyang.lambda;

import java.util.function.Function;

/**
 * Created on 2018/8/4.
 *
 * @author sehuaqi.
 * 描述：
 * 级联表达式 与 柯里化
 * 柯里化：把多个参数的函数，转换为只有一个参数的函数
 * 目的：函数标准化
 * 高阶函数：就是返回函数的函数
 */
public class CurryDemo {


    public static void main(String args[]) {
        //执行函数

        Function<Integer, Function<Integer, Integer>> fun = x -> y -> x + y;

        System.out.println(fun.apply(3).apply(5));

        Function<Integer, Function<Integer, Function<Integer, Integer>>> fun2 = x -> y -> z -> x + y + z;

        System.out.println(fun2.apply(2).apply(5).apply(8));

        int[] nums = {2, 4, 6};

        Function f = fun2;
        for (int i = 0; i < nums.length; i++) {
            if (f instanceof Function) {
                System.out.println("f是函数");
                Object obj = f.apply(nums[i]);
                if (obj instanceof Function) {
                    System.out.println("obj还是函数");
                    f = (Function) obj;
                } else {
                    System.out.println("obj不是是函数");
                    System.out.println("调用结束，结果为：" + obj);
                }
            }
        }


    }

}
